using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 建筑放置管理器
/// 负责处理建筑图标的点击和建筑的生成
/// </summary>
public class BuildingPlacer : MonoBehaviour
{
    /// <summary>当前选中的建筑预制体</summary>
    private GameObject selectedBuildingPrefab;

    /// <summary>建筑生成的地面图层</summary>
    [Tooltip("用于检测建筑放置位置的地面图层")]
    public LayerMask groundLayer;

    /// <summary>
    /// 设置选中的建筑预制体
    /// 供UI按钮调用
    /// </summary>
    /// <param name="buildingPrefab">要生成的建筑预制体</param>
    public void SelectBuilding(GameObject buildingPrefab)
    {
        selectedBuildingPrefab = buildingPrefab;
        Debug.Log("已选择建筑: " + buildingPrefab.name);
    }

    void Update()
    {
        // 检测鼠标左键点击且已选择建筑预制体
        if (Input.GetMouseButtonDown(0) && selectedBuildingPrefab != null)
        {
            PlaceBuilding();
        }
    }

    /// <summary>
    /// 在鼠标点击位置放置建筑
    /// </summary>
    private void PlaceBuilding()
    {
        // 1. 优化鼠标坐标转换（确保Z轴为0）
        Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        mouseWorldPos.z = 0; // 强制2D平面
        
        // 2. 使用OverlapPoint替代Raycast，直接检测点击位置
        Collider2D hitCollider = Physics2D.OverlapPoint(mouseWorldPos, groundLayer);
        
        // 3. 保留调试可视化
        Debug.DrawLine(mouseWorldPos - Vector3.right * 10, mouseWorldPos + Vector3.right * 10, Color.red, 1f);
        Debug.DrawLine(mouseWorldPos - Vector3.up * 10, mouseWorldPos + Vector3.up * 10, Color.red, 1f);
        
        if (hitCollider != null)
        {
            // 直接使用鼠标位置生成（已确保在地面上）
            Instantiate(selectedBuildingPrefab, mouseWorldPos, Quaternion.identity);
            Debug.Log("建筑已生成: " + selectedBuildingPrefab.name);
        }
        else
        {
            Debug.LogWarning("无法在此位置放置建筑 - 未检测到有效地面");
        }
    }
}